#ifndef LOG_MODULE_H
#define LOG_MODULE_H

#include <stdio.h>
#include <stdarg.h>
#include <stdbool.h>
#include <time.h>
#include <string.h>

// 日志等级宏定义
#define LOG_LEVEL_ERROR   4 // 错误
#define LOG_LEVEL_WARNING 3 // 警告
#define LOG_LEVEL_INFO    2 // 普通
#define LOG_LEVEL_DEBUG   1 // 调试

// 设置默认日志级别。可以根据需要调整，控制打印的日志信息。
// 默认日志级别是 LOG_LEVEL_DEBUG，这意味着 DEBUG 级别及以上的日志都会被输出。
#define CURRENT_LOG_LEVEL 1

// 日志颜色定义
#define COLOR_RESET       "\033[0m"
#define COLOR_RED         "\033[31m"
#define COLOR_YELLOW      "\033[33m"
#define COLOR_BLUE        "\033[34m"
#define COLOR_GREEN       "\033[32m"

// 时间戳显示等级：1 - 毫秒，2 - 秒，3 - 分钟，4 - 小时，5 - 日，6 - 月，7 - 年
#define LOG_TIMESTAMP_LEVEL 3  // 设置为3表示显示分钟、秒和毫秒

//日志输出到文件之前是否清空旧日志 1：清空 0：不清空，默认0
#define CLEAR_OLD_LOG 0

// 日志打印宏定义
#define LOG_ERROR(fmt, ...)    log_print(LOG_LEVEL_ERROR, __FILE__, __func__, __LINE__, "ERROR", COLOR_RED, fmt, ##__VA_ARGS__)
#define LOG_WARNING(fmt, ...)  log_print(LOG_LEVEL_WARNING, __FILE__, __func__, __LINE__, "WARNING", COLOR_YELLOW, fmt, ##__VA_ARGS__)
#define LOG_INFO(fmt, ...)     log_print(LOG_LEVEL_INFO, __FILE__, __func__, __LINE__, "INFO", COLOR_RESET, fmt, ##__VA_ARGS__)
#define LOG_DEBUG(fmt, ...)    log_print(LOG_LEVEL_DEBUG, __FILE__, __func__, __LINE__, "DEBUG", COLOR_GREEN, fmt, ##__VA_ARGS__)

// 核心日志打印函数声明
void log_print(int level, const char *file, const char *func, int line, const char *type, const char *color, const char *fmt, ...);

// 控制日志输出到文件的函数
void log_set_file_output(const char *file_path, int level, bool is_stdout);

// 关闭文件日志输出的函数
void log_disable_file_output();

// 定义控制文件日志输出的宏
#define ENABLE_FILE_LOG(file_path, ...) log_set_file_output(file_path, ##__VA_ARGS__, CURRENT_LOG_LEVEL, true)
#define DISABLE_FILE_LOG() log_disable_file_output()

#endif // LOG_MODULE_H
